package cn.stimd.spring.context;

import cn.stimd.spring.beans.factory.BeanFactory;
import cn.stimd.spring.beans.factory.config.AutowireCapableBeanFactory;
import cn.stimd.spring.context.event.ApplicationEventPublisher;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.io.support.ResourcePatternResolver;

/**
 * Created by Stimd
 * 项目地址：https://gitee.com/stimd/spring-wheel
 * 公众号：Java编程探微
 */
public interface ApplicationContext extends BeanFactory, ApplicationEventPublisher, ResourcePatternResolver {
    String getId();
    String getDisplayName();

    /**
     * 在上下文中公开AutowireCapableBeanFactory，主要用于初始化Spring容器之外的Bean实例，应用全部或部分生命周期。
     * 也可以选择ConfigurableApplicationContext的getBeanFactory方法，公开ConfigurableBeanFactory，效果相同
     */
    AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;

    /**
     * 获取环境变量（将EnvironmentCapable、ConfigurableApplicationContext两个接口的getEnvironment合并在一起）
     */
    ConfigurableEnvironment getEnvironment();
}
